// import com.alibaba.druid.sql.ast.SQLName_ptr ;
// import com.alibaba.druid.sql.ast.SQLObjectImpl;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor*;

// import java.util.ArrayList;
// import java.util.std::list;
#pragma once
#include <list>
#include "../SQLObjectImpl.h"
#include "SQLAlterTableItem.h"

class SQLColumnDefinition;
class SQLName;
class SQLASTVisitor;

class SQLAlterTableAddColumn : public SQLObjectImpl, virtual public SQLAlterTableItem
{
public:
  SQLColumnDefinition_list_ptr columns;

  // for mysql
  SQLName_ptr firstColumn;
  SQLName_ptr afterColumn;
  BOOL_ptr first;
  BOOL_ptr restrict;
  BOOL_ptr cascade;

  SQLAlterTableAddColumn();
  SHAREDOBJECT(SQLAlterTableAddColumn);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor) override;

  SQLColumnDefinition_list_ptr getColumns();

  void addColumn(SQLColumnDefinition_ptr column);

  SQLName_ptr getFirstColumn();

  void setFirstColumn(SQLName_ptr first);

  BOOL_ptr isFirst();

  void setFirst(BOOL_ptr first);

  SQLName_ptr getAfterColumn();

  void setAfterColumn(SQLName_ptr after);

  BOOL_ptr getRestrict();

  BOOL_ptr isRestrict();

  void setRestrict(BOOL_ptr restrict);

  BOOL_ptr isCascade();

  void setCascade(BOOL_ptr cascade);
};
